/*
 * @描述信息: 常用工具函数封装
      1、getType         判断数类型
      2、formatNum       将整数或者带有小数的数字，以逗号分隔
      3、padWithZero     个位数补前置0变成
      4、segmentToTime   时间片转时间 24 小时分为 48 片, 不作开始结束
      5、checkFile       获取文件后缀名(获取文件类型)
      6、pxToRem         px转rem（因为项目中写在行内的px无法自动转化成rem，需要我们手动计算）
      7、encryptReg      数据脱敏
*/

// 判断数类型
export const getType = dataOrigin => {
  return Object.prototype.toString.call(dataOrigin).slice(8, -1).toLocaleLowerCase()
}

// 将整数或者带有小数的数字，以逗号分隔
export const formatNum = str => {
  str += '' //数字转换为字符
  let x = str.split('.') //按照小数点分隔
  let x1 = x[0] //整数部分
  let x2 = x.length > 1 ? '.' + x[1] : '' //小数部分
  var rgx = /(\d+)(\d{3})/ //正则式定义
  while (rgx.test(x1)) {
    //正则式匹配
    x1 = x1.replace(rgx, '$1' + ',' + '$2') //正则式替换
  }
  return x1 + x2
}

//个位数补前置0变成
export const padWithZero = (num, { len = 2 }) => {
  if (typeof num != 'number') throw '请传入一个数值类型'
  return `${num}`.padStart(len, '0')
}

// 时间片转时间 24 小时分为 48 片, 不作开始结束，是否场地票的计算，调用方计算
export const segmentToTime = seg => {
  if (typeof seg != 'number') throw '请传入一个数值类型'
  const hour = padWithZero(Math.floor(seg / 2))
  const minute = seg & 1 ? '30' : '00' // 奇数&1是1，偶数&1是0
  return `${hour}:${minute}`
}

/**
 * @description       获取文件后缀名(获取文件类型)
 * @param fileName    为文件路径
 * 文件类型包括：图片image、音频audio、视频video、word、excel、ppt、txt文本、pdf、压缩文件zip、wps文字wpsword、wps表格wpsexcel、wps演示wpsppt
 */
export const checkFile = fileName => {
  let EXT = fileName.substr(fileName.lastIndexOf('.') + 1)
  let ext = EXT.toLocaleLowerCase()
  //image
  let imageArr = [
    'art',
    'jps',
    'jut',
    'flo',
    'fpx',
    'ico',
    'g3',
    'mcf',
    'pct',
    'svf',
    'wbmp',
    'rgb',
    'rf',
    'ras',
    'rast',
    'qif',
    'qti',
    'qtif',
    'pgm',
    'pgm',
    'pbm',
    'pnm',
    'ppm',
    'rp',
    'turbot',
    'x-png',
    'xwd',
    'nif',
    'niff',
    'pic',
    'pict',
    'bmp',
    'gif',
    'png',
    'xbm',
    'xpm',
    'ief',
    'iefs',
    'tif',
    'tiff',
    'jfif',
    'jfif-tbnl',
    'jpe',
    'jpeg',
    'jpg',
    'dwg',
    'dxf',
    'xif',
    'nap',
    'naplps'
  ]
  //audio
  let audioArr = [
    'amr',
    'aif',
    'aifc',
    'aiff',
    'ra',
    'qcp',
    'rm',
    'rmm',
    'rmp',
    'rmi',
    'rpm',
    'sid',
    'snd',
    'au',
    'funk',
    'my',
    'jam',
    'kar',
    'mid',
    'midi',
    'la',
    'mjf',
    'lam',
    'm2a',
    'mp2',
    'mp3',
    'm3u',
    'it',
    'mod',
    's3m',
    'voc',
    'wav',
    'gsd',
    'gsm',
    'vox',
    'vqe',
    'vqf'
  ]
  //video
  let videoArr = [
    'afi',
    'mjpg',
    'vos',
    'qt',
    'qtc',
    'scm',
    'mv',
    'm1v',
    'm2v',
    'mpe',
    'mpeg',
    'mpg',
    'mpga',
    'viv',
    'vivo',
    'moov',
    'mov',
    'movie',
    'mv',
    'isu',
    'fmf',
    'dif',
    'dv',
    'avi',
    'dl',
    'fli',
    'gl',
    'vdo',
    'avs',
    'asf',
    'asx',
    'mp4'
  ]
  //word
  let wordArr = ['wps', 'wpt', 'doc', 'docx', 'dot', 'dotx', 'rtf']
  //excel
  let excelArr = ['et', 'ett', 'xls', 'xlsx', 'xlt', 'xltx', 'csv', 'xls', 'xlsx', 'xlsm', 'xltx', 'xltm', 'xlsb', 'xlam', 'xml', 'xla', 'xlw', 'xlr']
  //ppt
  let pptArr = ['dps', 'dpt', 'ppt', 'pptx', 'pot', 'potx', 'potm', 'ppsx', 'ppsm', 'ppam']
  //txt
  let txtArr = ['prn', 'txt', 'dif', 'slk', 'prn', 'prn']
  //pdf
  let pdfArr = ['pdf']
  //zip
  let zipArr = ['rar', 'zip', 'arj', 'z', '7z', 'cab', 'gz', 'lzh', 'ace', 'uue', 'bz2', 'jar', 'iso']
  if (imageArr.includes(ext)) return 'image'
  if (audioArr.includes(ext)) return 'audio'
  if (videoArr.includes(ext)) return 'video'
  if (wordArr.includes(ext)) return 'word'
  if (excelArr.includes(ext)) return 'excel'
  if (pptArr.includes(ext)) return 'ppt'
  if (txtArr.includes(ext)) return 'txt'
  if (pdfArr.includes(ext)) return 'pdf'
  if (zipArr.includes(ext)) return 'zip'
  return ''
}

//将px转化为rem(100px == 2.66667rem, 设计稿为375)
export const pxToRem = value => {
  let fontSize = parseFloat(getComputedStyle(window.document.documentElement)['font-size'])
  return (value / fontSize) * 1 + 'rem'
}

// 数据脱敏（案例：'13456789876'.replace(encryptReg(), '$1****$2')         ==> "134****9876"）
export const encryptReg = (before = 3, after = 4) => {
  return new RegExp('(\\d{' + before + '})\\d*(\\d{' + after + '})')
}
